﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;
using DTO;
using GUI.Common;

namespace GUI.Admin.uc
{
    public partial class Ad_HoaDonUC : System.Web.UI.UserControl
    {
        #region Khai báo
        private HoaDonBLL _hdBLL;
        private List<HoaDonDTO> _lst;
        private List<ChiTietHoaDonDTO> _lstChiTietHoaDon;
        private HoaDonDTO _hdDTO;
        private ChiTietHoaDonBLL _cthdBLL;
        #endregion

        #region Page_Load
        protected void Page_Load(object sender, EventArgs e)
        {
            /*
             * Khi Form load thì thực hiện các thao tác sau:
             * 1. Hiển thị Panel danh sách hóa đơn             
             * 2. Ẩn Panel thêm, sửa thông tin hóa đơn
             * 3. Load dữ liệu vào Gridview
             * 4. Hiển thị tổng số hóa đơn vào Label
             */
            if (!IsPostBack)
            {
                try
                {
                    this.PanelDanhSachHoaDon.Visible = true;
                    this.PanelChiTietHoaDon.Visible = false;
                    // Load data vào gridview

                    // Load Tu ngay - Den ngay
                    // Get ngay gio hien tai

                    DateTime _now = DateTime.Now;

                    int _day = 0, _month = 0, _year = 0;

                    //Ngay
                    _day = _now.Day;

                    //Thang
                    _month = _now.Month;

                    //Nam
                    _year = _now.Year;

                    DateTime _tuNgay = new DateTime(_year, _month, _day, 1, 1, 1);
                    DateTime _denNgay = new DateTime(_year, _month, _day, 23, 59, 59);
                                        
                    this.DatePickerTuNgay.SelectedDate = _tuNgay;
                    this.DatePickerDenNgay.SelectedDate = _denNgay;

                    ////////////////////////////////////////
                    this.LoadDuLieu();
                }
                catch (Exception ex)
                {
                    Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
                }
            }
        }
        #endregion

        #region Phương thức hiển thị hóa đơn vào gridview
        /// <summary>
        /// Phương thức hiển thị hóa đơn vào gridview
        /// </summary>
        private void LoadDuLieu()
        {
            _hdBLL = new HoaDonBLL();

            // Load danh sách hóa đơn
            _lst = new List<HoaDonDTO>();

            try
            {
                _lst = _hdBLL.GetListHoaDon(this.DatePickerTuNgay.SelectedDate, this.DatePickerDenNgay.SelectedDate);

                GridViewHoaDon.DataSource = _lst;
                GridViewHoaDon.DataBind();

                // Hiển thị tổng số hóa đơn vào Label
                int d = _lst.Count;
                this.LabelTongSoHoaDon.Text = Convert.ToString(d);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region GridViewHoaDon_PageIndexChanging
        protected void GridViewHoaDon_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                GridViewHoaDon.PageIndex = e.NewPageIndex;
                this.LoadDuLieu();
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewHoaDon_RowDataBound
        protected void GridViewHoaDon_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if (e.Row.RowIndex >= 0)
                {
                    e.Row.Attributes.Add("onMouseOver", "this.style.backgroundColor='#bde2fd'");

                    if (e.Row.RowIndex % 2 == 0)
                        e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='#EFF3FB'");
                    else
                        e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='White'");

                }
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region Phương thức load tình trạng: Đã giao hàng - Đang duyệt
        /// <summary>
        /// Phương thức load tình trạng 
        /// </summary>
        /// <param name="tinhtrang"></param>
        /// <returns></returns>
        protected string LoadTinhTrang(object tinhtrang)
        {
            int result;
            try
            {
                result = (int)tinhtrang;

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return result == 1 ? "Đã giao hàng" : "Đang duyệt";
        }
        #endregion

        #region Phương thức LoadNguoiNhanHang
        /// <summary>
        /// Phương thức LoadNguoiNhanHang
        /// </summary>
        /// <param name="tinhtrang"></param>
        /// <returns></returns>
        protected string LoadNguoiNhanHang(object obj)
        {
            int ma_nnh;
            NguoiNhanHangDTO nnhDTO;
            NguoiNhanHangBLL nnhBLL;

            try
            {
                ma_nnh = (int)obj;
                nnhDTO = new NguoiNhanHangDTO();
                nnhBLL = new NguoiNhanHangBLL();

                nnhDTO = nnhBLL.GetNguoiNhanHang(ma_nnh.ToString());

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return nnhDTO.TenNguoiNhanHang;
        }
        #endregion

        #region LoadHinhThucGiaoHang
        protected string LoadHinhThucGiaoHang(object obj)
        {
            int ma_htgh;
            HinhThucGiaoHangDTO htghDTO;
            HinhThucGiaoHangBLL htghBLL;

            try
            {
                ma_htgh = (int)obj;
                htghDTO = new HinhThucGiaoHangDTO();
                htghBLL = new HinhThucGiaoHangBLL();

                htghDTO = htghBLL.GetHinhThucGiaoHang(ma_htgh);

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return htghDTO.TenHinhThucGiaoHang;
        }
        #endregion

        #region LoadHinhThucThanhToan
        protected string LoadHinhThucThanhToan(object obj)
        {
            int ma_httt;
            HinhThucThanhToanDTO htttDTO;
            HinhThucThanhToanBLL htttBLL;

            try
            {
                ma_httt = (int)obj;
                htttDTO = new HinhThucThanhToanDTO();
                htttBLL = new HinhThucThanhToanBLL();

                htttDTO = htttBLL.GetHinhThucThanhToan(ma_httt);

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return htttDTO.TenHinhThucThanhToan;
        }
        #endregion

        #region LoadKhuVucGiaoHang
        protected string LoadKhuVucGiaoHang(object obj)
        {
            int _makvgh;
            KhuVucGiaoHangDTO _kvghDTO;
            KhuVucGiaoHangBLL _kvghBLL;

            try
            {
                _makvgh = (int)obj;
                _kvghDTO = new KhuVucGiaoHangDTO();
                _kvghBLL = new KhuVucGiaoHangBLL();

                _kvghDTO = _kvghBLL.GetKhuVucGiaoHang(_makvgh);

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return _kvghDTO.TenKhuVucGiaoHang;
        }
        #endregion

        #region LoadKhachHang
        protected string LoadKhachHang(object obj)
        {
            KhachHangDTO khDTO;
            KhachHangBLL khBLL;

            try
            {
                khDTO = new KhachHangDTO();
                khBLL = new KhachHangBLL();

                khDTO = khBLL.GetKhachHang((string)obj);

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return khDTO.TenKhachHang;
        }
        #endregion

        #region LoadNhanVien
        protected string LoadNhanVien(object obj)
        {
            NhanVienDTO nvDTO;
            NhanVienBLL khBLL;

            try
            {
                nvDTO = new NhanVienDTO();
                khBLL = new NhanVienBLL();

                nvDTO = khBLL.GetNhanVien((string)obj);

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return nvDTO.TenNhanVien;
        }
        #endregion

        #region LoadSanPham
        protected string LoadSanPham(object obj)
        {
            SanPhamDTO spDTO;
            SanPhamBLL spBLL;

            try
            {
                spDTO = new SanPhamDTO();
                spBLL = new SanPhamBLL();

                spDTO = spBLL.GetSanPham((string)obj);

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return spDTO.TenSanPham;
        }
        #endregion

        #region LoadThanhTien
        protected string LoadThanhTien(object objSoLuong, object objDonGia)
        {
            //String.Format(“{0:0,0 vnđ}”, 20000000) –> kết quả sẽ là 20,000,000 vnđ. Chúc các bạn thành công.

            string _thanhtien = "";

            try
            {
                decimal _thanhtienCal = (int)objSoLuong * (decimal)objDonGia;
                _thanhtien = string.Format("{0:0,0}", _thanhtienCal);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return _thanhtien;
        }
        #endregion


        #region LoadFullDateTime
        protected string LoadFullDateTime(object date)
        {
            return CommonClass.FormatFullDateTime((DateTime)date);
        }
        #endregion


        #region ImageButtonTroLai_Click
        protected void ImageButtonTroLai_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("~/Admin/Default.aspx");
        }
        #endregion

        #region GridViewHoaDon_RowCommand
        protected void GridViewHoaDon_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                string mahd = e.CommandArgument.ToString();

                if (e.CommandName == "View") // Xem chi tiết hóa đơn
                {
                    //System.Threading.Thread.Sleep(2000);
                    _hdDTO = new HoaDonDTO();
                    _hdBLL = new HoaDonBLL();

                    // Hiển thị thông tin chi tiết hóa đơn xuống bên dưới
                    this.loadChiTietHoaDon(mahd);
                    this.PanelChiTietHoaDon.Visible = true;

                    this.HiddenFieldMaHoaDon.Value = mahd;
                    return;
                }

                if (e.CommandName == "Active") // Cập nhật tình trạng hóa đơn
                {
                    _hdDTO = new HoaDonDTO();
                    _hdBLL = new HoaDonBLL();

                    _hdDTO = _hdBLL.GetHoaDon(mahd);
                    int status = _hdDTO.TinhTrangHoaDon;
                    _hdDTO.TinhTrangHoaDon = status == 1 ? 0 : 1;

                    if (_hdBLL.Sua(_hdDTO) != -1)
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Đã cập nhật tình trạng thành công');", true);
                        this.LoadDuLieu();
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Cập nhật tình trạng không thành công');", true);
                    }
                    return;
                }

            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region Phương thức hiển thị chi tiết hóa đơn vào gridview
        /// <summary>
        /// Phương thức hiển thị chi tiết hóa đơn vào gridview
        /// </summary>
        private void loadChiTietHoaDon(string mahoadon)
        {
            _cthdBLL = new ChiTietHoaDonBLL();

            // Load danh sách hóa đơn
            _lstChiTietHoaDon = new List<ChiTietHoaDonDTO>();

            try
            {
                // Hiển thị tổng tiền
                _hdDTO = new HoaDonDTO();
                _hdBLL = new HoaDonBLL();

                _hdDTO = _hdBLL.GetHoaDon(mahoadon);

                this.LabelTongTien.Text = string.Format("{0:0,0}", _hdDTO.TongTien) + " VNĐ";

                // Dựa vào mã hóa đơn
                _lstChiTietHoaDon = _cthdBLL.GetListChiTietHoaDon(mahoadon);

                GridViewChiTietHoaDon.DataSource = _lstChiTietHoaDon;
                GridViewChiTietHoaDon.DataBind();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region ButtonThongKe_Click
        protected void ButtonThongKe_Click(object sender, EventArgs e)
        {
            this.LoadDuLieu();
        }
        #endregion

        #region ImageButtonIn_Click
        protected void ImageButtonIn_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("In.aspx?mahd=" + this.HiddenFieldMaHoaDon.Value + " ");
        }
        #endregion

        #region GridViewChiTietHoaDon_RowDataBound
        protected void GridViewChiTietHoaDon_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if (e.Row.RowIndex >= 0)
                {
                    e.Row.Attributes.Add("onMouseOver", "this.style.backgroundColor='#bde2fd'");

                    if (e.Row.RowIndex % 2 == 0)
                        e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='#EFF3FB'");
                    else
                        e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='White'");

                }
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewChiTietHoaDon_PageIndexChanging
        protected void GridViewChiTietHoaDon_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                GridViewHoaDon.PageIndex = e.NewPageIndex;
                this.LoadDuLieu();
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewHoaDon_RowDeleting
        protected void GridViewHoaDon_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            _hdBLL = new HoaDonBLL();
            _hdDTO = new HoaDonDTO();

            try
            {
                Label _mahoadon = (Label)GridViewHoaDon.Rows[e.RowIndex].FindControl("LabelMaHoaDon");
                _hdDTO.MaHoaDon = _mahoadon.Text;

                if (_hdBLL.Xoa(_hdDTO) != -1)
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Đã hủy hóa đơn thành công');", true);
                    this.LoadDuLieu();
                }
                else
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Hủy hóa đơn không thành công');", true);
                }
            }
            catch (Exception ex)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + ex.Message + "');", true);
            }
        }
        #endregion

    }
}